package com.qing.qingpicturebackend.exception;

import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.exception.NotPermissionException;
import cn.dev33.satoken.util.SaResult;
import com.qing.qingpicturebackend.common.BaseResponse;
import com.qing.qingpicturebackend.common.ResultUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    @ExceptionHandler(BusinessException.class)
    public BaseResponse<?> businessExceptionHandler(BusinessException e) {
        log.error("BusinessException", e);
        return ResultUtils.error(e.getCode(), e.getMessage());
    }

    @ExceptionHandler(RuntimeException.class)
    public BaseResponse<?> runtimeExceptionHandler(RuntimeException e) {
        log.error("RuntimeException", e);
        return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "系统错误");
    }
    @ExceptionHandler(NotLoginException.class)
    public BaseResponse<?> notLoginException(NotLoginException e) {
        log.error("NotLoginException", e);
//        // 判断场景值，定制化异常信息
//        String message = "";
//        if(e.getType().equals(NotLoginException.NOT_TOKEN)) {
//            message = "未提供token";
//        }
//        else if(e.getType().equals(NotLoginException.INVALID_TOKEN)) {
//            message = "token无效";
//        }
//        else if(e.getType().equals(NotLoginException.TOKEN_TIMEOUT)) {
//            message = "token已过期";
//        }
//        else if(e.getType().equals(NotLoginException.BE_REPLACED)) {
//            message = "token已被顶下线";
//        }
//        else if(e.getType().equals(NotLoginException.KICK_OUT)) {
//            message = "token已被踢下线";
//        }
//        else {
//            message = "当前会话未登录";
//        }
        return ResultUtils.error(ErrorCode.NOT_LOGIN_ERROR, e.getMessage());
    }

    @ExceptionHandler(NotPermissionException.class)
    public BaseResponse<?> notPermissionExceptionHandler(NotPermissionException e) {
        log.error("NotPermissionException", e);

        return ResultUtils.error(ErrorCode.NO_AUTH_ERROR, e.getMessage());
    }
}